[[swizzle]] T x, y, z, w;

[[swizzle]] vec<T, 2>
    &xx,
    &xy,
    &xz,
    &xw,
    &yx,
    &yy,
    &yz,
    &yw,
    &zx,
    &zy,
    &zz,
    &zw,
    &wx,
    &wy,
    &wz,
    &ww;

[[swizzle]] vec<T, 3>
    &xxx,
    &xxy,
    &xxz,
    &xxw,
    &xyx,
    &xyy,
    &xyz,
    &xyw,
    &xzx,
    &xzy,
    &xzz,
    &xzw,
    &xwx,
    &xwy,
    &xwz,
    &xww,
    &yxx,
    &yxy,
    &yxz,
    &yxw,
    &yyx,
    &yyy,
    &yyz,
    &yyw,
    &yzx,
    &yzy,
    &yzz,
    &yzw,
    &ywx,
    &ywy,
    &ywz,
    &yww,
    &zxx,
    &zxy,
    &zxz,
    &zxw,
    &zyx,
    &zyy,
    &zyz,
    &zyw,
    &zzx,
    &zzy,
    &zzz,
    &zzw,
    &zwx,
    &zwy,
    &zwz,
    &zww,
    &wxx,
    &wxy,
    &wxz,
    &wxw,
    &wyx,
    &wyy,
    &wyz,
    &wyw,
    &wzx,
    &wzy,
    &wzz,
    &wzw,
    &wwx,
    &wwy,
    &wwz,
    &www;

[[swizzle]] vec<T, 4>
    &xxxx,
    &xxxy,
    &xxxz,
    &xxxw,
    &xxyx,
    &xxyy,
    &xxyz,
    &xxyw,
    &xxzx,
    &xxzy,
    &xxzz,
    &xxzw,
    &xxwx,
    &xxwy,
    &xxwz,
    &xxww,
    &xyxx,
    &xyxy,
    &xyxz,
    &xyxw,
    &xyyx,
    &xyyy,
    &xyyz,
    &xyyw,
    &xyzx,
    &xyzy,
    &xyzz,
    &xyzw,
    &xywx,
    &xywy,
    &xywz,
    &xyww,
    &xzxx,
    &xzxy,
    &xzxz,
    &xzxw,
    &xzyx,
    &xzyy,
    &xzyz,
    &xzyw,
    &xzzx,
    &xzzy,
    &xzzz,
    &xzzw,
    &xzwx,
    &xzwy,
    &xzwz,
    &xzww,
    &xwxx,
    &xwxy,
    &xwxz,
    &xwxw,
    &xwyx,
    &xwyy,
    &xwyz,
    &xwyw,
    &xwzx,
    &xwzy,
    &xwzz,
    &xwzw,
    &xwwx,
    &xwwy,
    &xwwz,
    &xwww,
    &yxxx,
    &yxxy,
    &yxxz,
    &yxxw,
    &yxyx,
    &yxyy,
    &yxyz,
    &yxyw,
    &yxzx,
    &yxzy,
    &yxzz,
    &yxzw,
    &yxwx,
    &yxwy,
    &yxwz,
    &yxww,
    &yyxx,
    &yyxy,
    &yyxz,
    &yyxw,
    &yyyx,
    &yyyy,
    &yyyz,
    &yyyw,
    &yyzx,
    &yyzy,
    &yyzz,
    &yyzw,
    &yywx,
    &yywy,
    &yywz,
    &yyww,
    &yzxx,
    &yzxy,
    &yzxz,
    &yzxw,
    &yzyx,
    &yzyy,
    &yzyz,
    &yzyw,
    &yzzx,
    &yzzy,
    &yzzz,
    &yzzw,
    &yzwx,
    &yzwy,
    &yzwz,
    &yzww,
    &ywxx,
    &ywxy,
    &ywxz,
    &ywxw,
    &ywyx,
    &ywyy,
    &ywyz,
    &ywyw,
    &ywzx,
    &ywzy,
    &ywzz,
    &ywzw,
    &ywwx,
    &ywwy,
    &ywwz,
    &ywww,
    &zxxx,
    &zxxy,
    &zxxz,
    &zxxw,
    &zxyx,
    &zxyy,
    &zxyz,
    &zxyw,
    &zxzx,
    &zxzy,
    &zxzz,
    &zxzw,
    &zxwx,
    &zxwy,
    &zxwz,
    &zxww,
    &zyxx,
    &zyxy,
    &zyxz,
    &zyxw,
    &zyyx,
    &zyyy,
    &zyyz,
    &zyyw,
    &zyzx,
    &zyzy,
    &zyzz,
    &zyzw,
    &zywx,
    &zywy,
    &zywz,
    &zyww,
    &zzxx,
    &zzxy,
    &zzxz,
    &zzxw,
    &zzyx,
    &zzyy,
    &zzyz,
    &zzyw,
    &zzzx,
    &zzzy,
    &zzzz,
    &zzzw,
    &zzwx,
    &zzwy,
    &zzwz,
    &zzww,
    &zwxx,
    &zwxy,
    &zwxz,
    &zwxw,
    &zwyx,
    &zwyy,
    &zwyz,
    &zwyw,
    &zwzx,
    &zwzy,
    &zwzz,
    &zwzw,
    &zwwx,
    &zwwy,
    &zwwz,
    &zwww,
    &wxxx,
    &wxxy,
    &wxxz,
    &wxxw,
    &wxyx,
    &wxyy,
    &wxyz,
    &wxyw,
    &wxzx,
    &wxzy,
    &wxzz,
    &wxzw,
    &wxwx,
    &wxwy,
    &wxwz,
    &wxww,
    &wyxx,
    &wyxy,
    &wyxz,
    &wyxw,
    &wyyx,
    &wyyy,
    &wyyz,
    &wyyw,
    &wyzx,
    &wyzy,
    &wyzz,
    &wyzw,
    &wywx,
    &wywy,
    &wywz,
    &wyww,
    &wzxx,
    &wzxy,
    &wzxz,
    &wzxw,
    &wzyx,
    &wzyy,
    &wzyz,
    &wzyw,
    &wzzx,
    &wzzy,
    &wzzz,
    &wzzw,
    &wzwx,
    &wzwy,
    &wzwz,
    &wzww,
    &wwxx,
    &wwxy,
    &wwxz,
    &wwxw,
    &wwyx,
    &wwyy,
    &wwyz,
    &wwyw,
    &wwzx,
    &wwzy,
    &wwzz,
    &wwzw,
    &wwwx,
    &wwwy,
    &wwwz,
    &wwww;

[[swizzle]] T r, g, b, a;

[[swizzle]] vec<T, 2>
    &rr,
    &rg,
    &rb,
    &ra,
    &gr,
    &gg,
    &gb,
    &ga,
    &br,
    &bg,
    &bb,
    &ba,
    &ar,
    &ag,
    &ab,
    &aa;

[[swizzle]] vec<T, 3>
    &rrr,
    &rrg,
    &rrb,
    &rra,
    &rgr,
    &rgg,
    &rgb,
    &rga,
    &rbr,
    &rbg,
    &rbb,
    &rba,
    &rar,
    &rag,
    &rab,
    &raa,
    &grr,
    &grg,
    &grb,
    &gra,
    &ggr,
    &ggg,
    &ggb,
    &gga,
    &gbr,
    &gbg,
    &gbb,
    &gba,
    &gar,
    &gag,
    &gab,
    &gaa,
    &brr,
    &brg,
    &brb,
    &bra,
    &bgr,
    &bgg,
    &bgb,
    &bga,
    &bbr,
    &bbg,
    &bbb,
    &bba,
    &bar,
    &bag,
    &bab,
    &baa,
    &arr,
    &arg,
    &arb,
    &ara,
    &agr,
    &agg,
    &agb,
    &aga,
    &abr,
    &abg,
    &abb,
    &aba,
    &aar,
    &aag,
    &aab,
    &aaa;

[[swizzle]] vec<T, 4>
    &rrrr,
    &rrrg,
    &rrrb,
    &rrra,
    &rrgr,
    &rrgg,
    &rrgb,
    &rrga,
    &rrbr,
    &rrbg,
    &rrbb,
    &rrba,
    &rrar,
    &rrag,
    &rrab,
    &rraa,
    &rgrr,
    &rgrg,
    &rgrb,
    &rgra,
    &rggr,
    &rggg,
    &rggb,
    &rgga,
    &rgbr,
    &rgbg,
    &rgbb,
    &rgba,
    &rgar,
    &rgag,
    &rgab,
    &rgaa,
    &rbrr,
    &rbrg,
    &rbrb,
    &rbra,
    &rbgr,
    &rbgg,
    &rbgb,
    &rbga,
    &rbbr,
    &rbbg,
    &rbbb,
    &rbba,
    &rbar,
    &rbag,
    &rbab,
    &rbaa,
    &rarr,
    &rarg,
    &rarb,
    &rara,
    &ragr,
    &ragg,
    &ragb,
    &raga,
    &rabr,
    &rabg,
    &rabb,
    &raba,
    &raar,
    &raag,
    &raab,
    &raaa,
    &grrr,
    &grrg,
    &grrb,
    &grra,
    &grgr,
    &grgg,
    &grgb,
    &grga,
    &grbr,
    &grbg,
    &grbb,
    &grba,
    &grar,
    &grag,
    &grab,
    &graa,
    &ggrr,
    &ggrg,
    &ggrb,
    &ggra,
    &gggr,
    &gggg,
    &gggb,
    &ggga,
    &ggbr,
    &ggbg,
    &ggbb,
    &ggba,
    &ggar,
    &ggag,
    &ggab,
    &ggaa,
    &gbrr,
    &gbrg,
    &gbrb,
    &gbra,
    &gbgr,
    &gbgg,
    &gbgb,
    &gbga,
    &gbbr,
    &gbbg,
    &gbbb,
    &gbba,
    &gbar,
    &gbag,
    &gbab,
    &gbaa,
    &garr,
    &garg,
    &garb,
    &gara,
    &gagr,
    &gagg,
    &gagb,
    &gaga,
    &gabr,
    &gabg,
    &gabb,
    &gaba,
    &gaar,
    &gaag,
    &gaab,
    &gaaa,
    &brrr,
    &brrg,
    &brrb,
    &brra,
    &brgr,
    &brgg,
    &brgb,
    &brga,
    &brbr,
    &brbg,
    &brbb,
    &brba,
    &brar,
    &brag,
    &brab,
    &braa,
    &bgrr,
    &bgrg,
    &bgrb,
    &bgra,
    &bggr,
    &bggg,
    &bggb,
    &bgga,
    &bgbr,
    &bgbg,
    &bgbb,
    &bgba,
    &bgar,
    &bgag,
    &bgab,
    &bgaa,
    &bbrr,
    &bbrg,
    &bbrb,
    &bbra,
    &bbgr,
    &bbgg,
    &bbgb,
    &bbga,
    &bbbr,
    &bbbg,
    &bbbb,
    &bbba,
    &bbar,
    &bbag,
    &bbab,
    &bbaa,
    &barr,
    &barg,
    &barb,
    &bara,
    &bagr,
    &bagg,
    &bagb,
    &baga,
    &babr,
    &babg,
    &babb,
    &baba,
    &baar,
    &baag,
    &baab,
    &baaa,
    &arrr,
    &arrg,
    &arrb,
    &arra,
    &argr,
    &argg,
    &argb,
    &arga,
    &arbr,
    &arbg,
    &arbb,
    &arba,
    &arar,
    &arag,
    &arab,
    &araa,
    &agrr,
    &agrg,
    &agrb,
    &agra,
    &aggr,
    &aggg,
    &aggb,
    &agga,
    &agbr,
    &agbg,
    &agbb,
    &agba,
    &agar,
    &agag,
    &agab,
    &agaa,
    &abrr,
    &abrg,
    &abrb,
    &abra,
    &abgr,
    &abgg,
    &abgb,
    &abga,
    &abbr,
    &abbg,
    &abbb,
    &abba,
    &abar,
    &abag,
    &abab,
    &abaa,
    &aarr,
    &aarg,
    &aarb,
    &aara,
    &aagr,
    &aagg,
    &aagb,
    &aaga,
    &aabr,
    &aabg,
    &aabb,
    &aaba,
    &aaar,
    &aaag,
    &aaab,
    &aaaa;